home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-10-28 | 1.7 KB | 95 lines | [TEXT/MPS ] |
- Listing 1: Setting FPU precision in Absoft Fortran
-
-
- C set rounding precision for ABsoft Fortran
- INTEGER*4 i,getfpcontrol
-
- INTEGER*4 RPCLEAR
- PARAMETER(RPCLEAR=z’FFFFFF3F’)
-
- INTEGER*4 RPSINGLE
- PARAMETER (RPSINGLE=z’00000040’)
-
- i = getfpcontrol() ! get current control word
- i = (i .and. RPCLEAR) ! clear current rounding
- precision
- i = (i .or. RPSINGLE) ! or in new prec.
- call setfpcontrol(i) ! set new control word
-
-
-
-
- Listing 2: Example subroutines from the Linpack and Whetstone benchmarks
-
-
- (Whetstone, main program)
- …
- …
- C MODULE 8: PROCEDURE CALLS
- X=1.0
- Y=1.0
- Z=1.0
- DO 80 I=1,N8
- CALL P3(X,Y,Z)
- 80 CONTINUE
- …
- …
-
- SUBROUTINE P3(X,Y,Z)
- COMMON /B/ T,T2
- X=T*(X+Y)
- Y=T*(X+Y)
- Z=(X+Y)/T2
- RETURN
- END
-
- (saxpy subroutine from the Linpack benchmark)
-
- subroutine saxpy(n,da,dx,incx,dy,incy)
- c
- c constant times a vector plus a vector.
- c uses unrolled loops for increments equal to one.
- c jack dongarra, linpack, 3/11/78.
- c
- real dx(1),dy(1),da
- integer i,incx,incy,ix,iy,m,mp1,n
- c
- if(n.le.0)return
- if (da .eq. 0.0e0) return
- if(incx.eq.1.and.incy.eq.1)go to 20
- c
- c code for unequal increments or equal increments
- c not equal to 1
- c
- ix = 1
- iy = 1
- if(incx.lt.0)ix = (-n+1)*incx + 1
- if(incy.lt.0)iy = (-n+1)*incy + 1
- do 10 i = 1,n
- dy(iy) = dy(iy) + da*dx(ix)
- ix = ix + incx
- iy = iy + incy
- 10 continue
- return
- c
- c code for both increments equal to 1
- c
- c
- c clean-up loop
- c
- 20 m = mod(n,4)
- if( m .eq. 0 ) go to 40
- do 30 i = 1,m
- dy(i) = dy(i) + da*dx(i)
- 30 continue
- if( n .lt. 4 ) return
- 40 mp1 = m + 1
- do 50 i = mp1,n,4
- dy(i) = dy(i) + da*dx(i)
- dy(i + 1) = dy(i + 1) + da*dx(i + 1)
- dy(i + 2) = dy(i + 2) + da*dx(i + 2)
- dy(i + 3) = dy(i + 3) + da*dx(i + 3)
- 50 continue
- return
- end
-